home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / msn / p / MSNPNotification.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2008-10-13  |  11.6 KB  |  310 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from logging import getLogger
  5. import util
  6. from util import callsback, isiterable
  7. import msn
  8. from msn.MSNCommands import CommandProcessor, Message
  9. from util.Events import event, EventMixin
  10. log = getLogger('msn.p.ns')
  11. defcb = dict(trid = True, callback = sentinel)
  12.  
  13. class MSNNotification(CommandProcessor, EventMixin):
  14.     cid_class = str
  15.     events = EventMixin.events | set(('on_conn_error', 'on_connect', 'on_require_auth', 'on_receive_version', 'on_auth_challenge', 'disconnect'))
  16.     versions = [
  17.         'MSNP12',
  18.         'MSNP11',
  19.         'MSNP10',
  20.         'MSNP9',
  21.         'MSNP8']
  22.     props = {
  23.         'phh': 'phone_home',
  24.         'phw': 'phone_work',
  25.         'phm': 'phone_mobile',
  26.         'mob': 'allow_mobile',
  27.         'mbe': 'enable_mobile',
  28.         'utl': 'unknown',
  29.         'wwe': 'enable_wireless',
  30.         'wpl': 'unknown',
  31.         'wpc': 'unknown',
  32.         'mfn': 'remote_alias',
  33.         'cid': 'unknown',
  34.         'hsb': 'has_blog' }
  35.     
  36.     def __init__(self, SckCls_or_sck, server = None, buddy = None):
  37.         CommandProcessor.__init__(self, log)
  38.         EventMixin.__init__(self)
  39.         self._server = server
  40.         self._sb_class = None
  41.         self._last_bname = None
  42.         self.self_buddy = buddy
  43.         self.allow_unknown_contacts = False
  44.         if type(SckCls_or_sck) is type:
  45.             self.socket = None
  46.             self._socktype = SckCls_or_sck
  47.         else:
  48.             self.socket = SckCls_or_sck
  49.             self._socktype = type(self.socket)
  50.             self._server = self.socket._server
  51.             self.socket.bind('on_message', self.on_message)
  52.             self.socket.bind('on_conn_error', self.on_sck_conn_error)
  53.             self.socket.bind('on_close', self.on_sck_close)
  54.  
  55.     
  56.     def connect(self):
  57.         if self.socket is None:
  58.             log.info('Creating new %r to connect to %r', self._socktype, self._server)
  59.             self.socket = self._socktype()
  60.             self.socket.bind('on_connect', self.on_sck_connect)
  61.             self.socket.bind('on_conn_error', self.on_sck_conn_error)
  62.             self.socket.bind('on_close', self.on_sck_close)
  63.             conn_args = self.socket.connect_args_for('NS', self._server)
  64.             self.socket._connect(*conn_args)
  65.         
  66.  
  67.     
  68.     def get_local_sockname(self):
  69.         return self.socket.get_local_sockname()
  70.  
  71.     
  72.     def get_token(self, domain):
  73.         return self.tokens[domain].Token
  74.  
  75.     
  76.     def set_token(self, domain, token):
  77.         self.tokens[domain].Token = token
  78.  
  79.     
  80.     def connected(self):
  81.         return self.socket is not None
  82.  
  83.     
  84.     def disconnect(self, do_event = True):
  85.         if self.socket is not None:
  86.             log.info('%r disconnecting socket: %r', self, self.socket)
  87.             self.socket._disconnect()
  88.             self.socket = None
  89.             if do_event:
  90.                 self.event('disconnect')
  91.             
  92.         
  93.         self.CONNECTED = False
  94.  
  95.     
  96.     def close_transport(self, xport):
  97.         log.info('Closing transport %r (self.socket is %r)', xport, self.socket)
  98.         if self.socket is xport:
  99.             self.disconnect()
  100.         else:
  101.             xport.clear()
  102.             xport.close()
  103.  
  104.     
  105.     def on_sck_close(self, sck):
  106.         if self.socket not in (None, sck):
  107.             log.info('An old socket got disconnected (%r)', sck)
  108.             sck.clear()
  109.             return None
  110.         
  111.         if self.socket is None:
  112.             log.info('Disconnecting normally %r: %r', self, sck)
  113.             self.event('disconnect')
  114.         else:
  115.             log.info('Disconnecting unexpectedly %r: %r', self, sck)
  116.             self.socket.clear()
  117.             self.disconnect(do_event = False)
  118.             self.event('on_conn_error', self, 'disconnected unexpectedly')
  119.  
  120.     
  121.     def on_sck_conn_error(self, sck, e):
  122.         self.socket.unbind('on_conn_error', self.on_sck_conn_error)
  123.         self.event('on_conn_error', self, e)
  124.  
  125.     
  126.     def on_sck_connect(self, s):
  127.         old_s = self.socket
  128.         self.socket = s
  129.         if old_s not in (self.socket, None):
  130.             self.close_transport(old_s)
  131.         
  132.         self.socket.unbind('on_connect', self.on_sck_connect)
  133.         self.socket.bind('on_message', self.on_message)
  134.         pref = pref
  135.         import common
  136.         user_vers = pref('msn.versions', None)
  137.         if user_vers is not None and isiterable(user_vers) and len(user_vers) > 0:
  138.             versions = user_vers
  139.         else:
  140.             versions = self.versions
  141.         self.init_ns_connection(versions)
  142.  
  143.     
  144.     def init_ns_connection(self, versions):
  145.         self.socket.pause()
  146.         self.send_ver(versions)
  147.         self.event('on_require_auth')
  148.  
  149.     
  150.     def unhook_socket(self):
  151.         sck = self.socket
  152.         self.socket = None
  153.         sck.unbind('on_conn_error', self.on_sck_conn_error)
  154.         sck.unbind('on_message', self.on_message)
  155.         sck.unbind('on_close', self.on_sck_close)
  156.         return sck
  157.  
  158.     
  159.     def send_ver(self, versions):
  160.         self.socket.send(Message('VER', *versions + [
  161.             'CVR0']), **defcb)
  162.  
  163.     
  164.     def recv_ver(self, msg):
  165.         ver = msg.args[0]
  166.         num = int(ver[4:])
  167.         self.event('on_receive_version', num)
  168.  
  169.     
  170.     def send_cvr(self, username):
  171.         self.socket.send(Message('cvr', '0x0409', 'winnt', '5.1', 'i386', 'WLMSGRBETA', '9.0.1407', 'msmsgs', username), **defcb)
  172.  
  173.     
  174.     def recv_cvr(self, msg):
  175.         log.info('got cvr')
  176.  
  177.     
  178.     def send_usr(self, username, password, auth_type):
  179.         self._username = username
  180.         self._password = password
  181.         self._auth_type = auth_type
  182.         self.socket.send(Message('usr', auth_type, 'I', username), trid = True, success = self._recv_usr_success, error = self._recv_usr_error)
  183.  
  184.     
  185.     def _recv_usr_error(self, sck, e):
  186.         log.info('Got an error when waiting for USR response: %r', e)
  187.         self.event('on_conn_error', self, e)
  188.  
  189.     
  190.     def _recv_usr_success(self, sck, msg):
  191.         log.info('Got a success when waiting for USR response: %r', msg)
  192.         return True
  193.  
  194.     
  195.     def recv_usr(self, msg):
  196.         auth_type = msg[0]
  197.         type_ = msg[1]
  198.         if auth_type == 'OK':
  199.             self.event('on_auth_success')
  200.             return None
  201.         
  202.         if type_ == 'S':
  203.             self.event('on_auth_challenge', msg[2:])
  204.         
  205.  
  206.     
  207.     def recv_xfr(self, msg):
  208.         (type_, new_addr) = msg.args[:2]
  209.         server = util.srv_str_to_tuple(new_addr, 1863)
  210.         if type_ == 'NS':
  211.             log.info('Switching NS servers to %r', server)
  212.             self.close_transport(self.socket)
  213.             self._server = server
  214.             self.connect()
  215.         else:
  216.             cookie = msg.args[3]
  217.             self.switchboard_request(server, cookie)
  218.  
  219.     
  220.     def recv_xfr_error(self, msg):
  221.         self.sb_request_error(msg)
  222.  
  223.     
  224.     def authenticate(self, username, password, auth_type):
  225.         self.send_cvr(username)
  226.         self.send_usr(username, password, auth_type)
  227.         self.socket.unpause()
  228.  
  229.     
  230.     def send_png(self):
  231.         return NotImplemented
  232.  
  233.     
  234.     def _load_contact_list(self):
  235.         return NotImplemented
  236.  
  237.     
  238.     def _add_buddy(self, bname, bid, gname, callback):
  239.         return NotImplemented
  240.  
  241.     
  242.     def _add_buddy_to_group(self, bname, bid, gid, callback):
  243.         return NotImplemented
  244.  
  245.     
  246.     def _remove_buddy(self, lid, buddy, group, callback):
  247.         return NotImplemented
  248.  
  249.     
  250.     def _remove_buddy_from_group(self, name, bid, g_id, callback):
  251.         return NotImplemented
  252.  
  253.     
  254.     def _authorize_buddy(self, buddy, authorize, callback):
  255.         return NotImplemented
  256.  
  257.     
  258.     def _block_buddy(self, buddy, callback):
  259.         return NotImplemented
  260.  
  261.     
  262.     def _unblock_buddy(self, buddy, callback):
  263.         return NotImplemented
  264.  
  265.     
  266.     def _move_buddy(self, bname, bid, to_groupid, from_groupid, callback):
  267.         return NotImplemented
  268.  
  269.     
  270.     def _set_display_name(self, new_alias, callback):
  271.         return NotImplemented
  272.  
  273.     
  274.     def _set_remote_alias(self, buddy, new_alias, callback):
  275.         return NotImplemented
  276.  
  277.     
  278.     def _get_profile(self, buddy, callback):
  279.         return NotImplemented
  280.  
  281.     
  282.     def _rename_group(self, group, name, callback):
  283.         return NotImplemented
  284.  
  285.     
  286.     def _set_buddy_icon(self, icon, callback):
  287.         return NotImplemented
  288.  
  289.     
  290.     def _get_buddy_icon(self, name, callback):
  291.         return NotImplemented
  292.  
  293.     
  294.     def _send_file(self, buddy, filepath, callback):
  295.         return NotImplemented
  296.  
  297.     
  298.     def _send_sms(self, phone, message, callback):
  299.         return NotImplemented
  300.  
  301.     
  302.     def _set_status(self, code, callback):
  303.         return NotImplemented
  304.  
  305.     
  306.     def _set_status_message(self, message, callback):
  307.         return NotImplemented
  308.  
  309.  
  310.